/*
 * NodoArbolB.h
 *
 *  Created on: 15/10/2009
 *      Author: andres
 */

#ifndef NODOARBOLB_H_
#define NODOARBOLB_H_

#include "ComponenteArbolB.h"
#include "../Indice.inc.h"
#include "HojaArbolB.h"



class NodoArbolB: public ComponenteArbolB
{
public:

	NodoArbolB(int cantidadClaves);

	bool EsHoja();

	bool Ingresar(Informacion* dato);

	std::vector<Informacion*> Buscar(Clave* dato);

	bool Quitar(Informacion* dato);

	void SubirMenor(Clave* &dato, ComponenteArbolB* &puntero);

	void SubirMayor(Clave* &dato, ComponenteArbolB* &puntero);

	void BajarMenor(Clave* dato, ComponenteArbolB* puntero);

	void BajarMayor(Clave* dato, ComponenteArbolB* puntero);

	void MayorClave(Clave* &dato);

	virtual ~NodoArbolB();

	vector<Clave*> claves;
	vector<ComponenteArbolB*> nodos;

private:

	void MoverContenidoNodo(int desde, int hasta,int cantidad);

	void MoverContenido(int desde, int hasta);

	void ActualizarClave(int claveNum);

	void SolucionarDesborde(int i);

	void SolucionarSubFlojo(int i);

	void FucionarNodos(int nodo1,int nodo2, int nodo3);

	void FucionarHojas(int hoja1,int hoja2, int hoja3);

	void DividirNodos(int nodo1, int nodo2);

	void DividirHojas(int hoja1,int hoja2);




};

#endif /* NODOARBOLB_H_ */
